#include <my_header.h>

int main(int argc, char *argv[]){
    ARGS_CHECK(argc,2);
    DIR *dirp = opendir(argv[1]);
    //打开目录流并进行错误处理
    ERROR_CHECK(dirp,NULL,"opendir");
    //切换工作目录作为参数传入的目录
    int ret = chdir(argv[1]);
    ERROR_CHECK(ret, -1, "chdir");

    //dirent结构体指针，用于存放目录信息
    struct dirent *pdirent;
    //读取每个目录中的每个目录项
    while((pdirent = readdir(dirp)) != NULL){

        // 拼接文件路径，如果上面没有chdir切换目录，这里就需要做绝对路径的拼接操作
        // char path[1024] = {0};
        // sprintf(path, "%s%s%s", argv[1], "/", pdirent->d_name);
        // 或者也可以用strcpy以及strcat函数进行复制拼接获取最终目录
        // strcpy(path, argv[1]);
        // strcat(path, "/");
        // strcat(path, pdirent->d_name);

        //get file state
        struct stat stat_buf;
        int ret = stat(pdirent->d_name, &stat_buf);
        //because here changed work dir 
        //so just use work's path 
        //- or usr path
        
        ERROR_CHECK(ret, -1, "stat");
        //printf
        printf("%o %lu %u %u %lu %lu %s\n", 
               stat_buf.st_mode,        // 以八进制无符号输出，可以看到权限的数字表示法
               stat_buf.st_nlink,       // 无符号长整型输出          
               stat_buf.st_uid,         // 无符号int输出
               stat_buf.st_gid,         // 无符号int输出
               stat_buf.st_size,        // 无符号长整型输出   
               stat_buf.st_mtim.tv_sec,  // 时间戳打印秒数，以无符号长整型打印。这里还可以写statbuf.st_mtime
               pdirent->d_name);        // 字符串打印
    }
    // 关闭目录流
    closedir(dirp);
    return 0;
}   

